/*
 * Copyright 2023 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package androidx.appactions.interaction.capabilities.serializers

import androidx.appactions.interaction.protobuf.Struct
import com.google.common.truth.Truth.assertThat
import org.junit.Test

class ValueUtilsTest {
  @Test
  fun getSingleStringValue() {
    assertThat(stringValue("Hello").singleStringValue).isEqualTo("Hello")
    assertThat(listValue(listOf(stringValue("Hello"))).singleStringValue).isEqualTo("Hello")
    assertThat(
            listValue(
                    listOf(
                        stringValue("Hello"),
                        stringValue("World"),
                    ))
                .singleStringValue)
        .isNull()
    assertThat(structValue(Struct.getDefaultInstance()).singleStringValue).isNull()
  }

  @Test
  fun getSingleNumberValue() {
      assertThat(numberValue(123.0).singleNumberValue).isEqualTo(123.0)
      assertThat(listValue(listOf(numberValue(123.0))).singleNumberValue).isEqualTo(123.0)
      assertThat(
              listValue(
                      listOf(
                          numberValue(123.0),
                          numberValue(456.0),
                      ))
                  .singleNumberValue)
          .isNull()
      assertThat(structValue(Struct.getDefaultInstance()).singleNumberValue).isNull()
  }

  @Test fun getSingleBoolValue() {
      assertThat(boolValue(true).singleBoolValue).isTrue()
      assertThat(listValue(listOf(boolValue(true))).singleBoolValue).isTrue()
      assertThat(
          listValue(
              listOf(
                  boolValue(true),
                  boolValue(false),
              ))
              .singleBoolValue)
          .isNull()
      assertThat(structValue(Struct.getDefaultInstance()).singleBoolValue).isNull()
  }
}
